/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;

/**
 *
 * @author Administrator
 */
public class Docente {
    private int codDocente, codHorario, codCurso, codGrado, codNivel, codSeccion,
            codNivelGrado;
    private String nombreDocente,  apellidoPaternoDocente,
            apellidoMaternoDocente,  nombreCursoDocente,
            anioDocente, gradoDocente, seccionDocente,
            nivelDocente;


    /**
     * @return the codDocente
     */
    public int getCodDocente() {
        return codDocente;
    }

    /**
     * @param codDocente the codDocente to set
     */
    public void setCodDocente(int codDocente) {
        this.codDocente = codDocente;
    }


    /**
     * @return the nombreDocente
     */
    public String getNombreDocente() {
        return nombreDocente;
    }

    /**
     * @param nombreDocente the nombreDocente to set
     */
    public void setNombreDocente(String nombreDocente) {
        this.nombreDocente = nombreDocente;
    }

    /**
     * @return the apellidoPaternoDocente
     */
    public String getApellidoPaternoDocente() {
        return apellidoPaternoDocente;
    }

    /**
     * @param apellidoPaternoDocente the apellidoPaternoDocente to set
     */
    public void setApellidoPaternoDocente(String apellidoPaternoDocente) {
        this.apellidoPaternoDocente = apellidoPaternoDocente;
    }

    /**
     * @return the apellidoMaternoDocente
     */
    public String getApellidoMaternoDocente() {
        return apellidoMaternoDocente;
    }

    /**
     * @param apellidoMaternoDocente the apellidoMaternoDocente to set
     */
    public void setApellidoMaternoDocente(String apellidoMaternoDocente) {
        this.apellidoMaternoDocente = apellidoMaternoDocente;
    }


    /**
     * @return the nombreCursoDocente
     */
    public String getNombreCursoDocente() {
        return nombreCursoDocente;
    }

    /**
     * @param nombreCursoDocente the nombreCursoDocente to set
     */
    public void setNombreCursoDocente(String nombreCursoDocente) {
        this.nombreCursoDocente = nombreCursoDocente;
    }

        /**
     * @return the anioDocente
     */
    public String getAnioDocente() {
        return anioDocente;
    }

    /**
     * @param anioDocente the anioDocente to set
     */
    public void setAnioDocente(String anioDocente) {
        this.anioDocente = anioDocente;
    }

    /**
     * @return the gradoDocente
     */
    public String getGradoDocente() {
        return gradoDocente;
    }

    /**
     * @param gradoDocente the gradoDocente to set
     */
    public void setGradoDocente(String gradoDocente) {
        this.gradoDocente = gradoDocente;
    }

    /**
     * @return the seccionDocente
     */
    public String getSeccionDocente() {
        return seccionDocente;
    }

    /**
     * @param seccionDocente the seccionDocente to set
     */
    public void setSeccionDocente(String seccionDocente) {
        this.seccionDocente = seccionDocente;
    }

    /**
     * @return the nivelDocente
     */
    public String getNivelDocente() {
        return nivelDocente;
    }

    /**
     * @param nivelDocente the nivelDocente to set
     */
    public void setNivelDocente(String nivelDocente) {
        this.nivelDocente = nivelDocente;
    }

    /**
     * @return the codHorario
     */
    public int getCodHorario() {
        return codHorario;
    }

    /**
     * @param codHorario the codHorario to set
     */
    public void setCodHorario(int codHorario) {
        this.codHorario = codHorario;
    }


public static ArrayList<Docente> NombreDocentesPorAñoAcademico(int codDocente){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select distinct(dh.cod_persona), pn.primer_nombre as nombre, " +
                "pn.apell_paterno as apPaterno, pn.apell_materno as apMaterno " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join personal p on p.cod_persona = dh.cod_persona " +
                "inner join p_natural pn on pn.cod_persona = p.cod_persona " +
                "where  dh.cod_horario IN (     " +
                    "SELECT ha.cod_horario     " +
                    "FROM horario_aula ha     " +
                    "WHERE ha.cod_progaula IN (           " +
                        "SELECT pa.cod_progaula           " +
                        "FROM programacion_aula pa           " +
                        "WHERE pa.cod_progannoacad IN (                 " +
                            "select pac.cod_progannoacad                 " +
                            "from programacion_annoacademico pac                 " +
                            "where TO_CHAR(pac.fecha_inicio, 'YYYY') = yearp(?)))) " +
                "order by pn.apell_paterno" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codDocente);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodDocente(rs.getInt(1));
                oDocente.setNombreDocente(rs.getString(2));
                oDocente.setApellidoPaternoDocente(rs.getString(3));
                oDocente.setApellidoMaternoDocente(rs.getString(4));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static ArrayList<Docente> NombreDocentesActual(){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select distinct(dh.cod_persona), pn.primer_nombre as nombre, " +
                "pn.apell_paterno as apPaterno, pn.apell_materno as apMaterno " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join personal p on p.cod_persona = dh.cod_persona " +
                "inner join p_natural pn on pn.cod_persona = p.cod_persona " +
                "where  dh.cod_horario IN (     " +
                    "SELECT ha.cod_horario     " +
                    "FROM horario_aula ha     " +
                    "WHERE ha.cod_progaula IN (           " +
                        "SELECT pa.cod_progaula           " +
                        "FROM programacion_aula pa           " +
                        "WHERE pa.cod_progannoacad IN (                 " +
                            "select pac.cod_progannoacad                 " +
                            "from programacion_annoacademico pac                 " +
                            "where TO_CHAR(pac.fecha_inicio, 'YYYY') = to_char(current_date, 'YYYY')))) " +
                "order by pn.apell_paterno" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);

            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodDocente(rs.getInt(1));
                oDocente.setNombreDocente(rs.getString(2));
                oDocente.setApellidoPaternoDocente(rs.getString(3));
                oDocente.setApellidoMaternoDocente(rs.getString(4));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }


public static ArrayList<Docente> gradosSeccionNivel(){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado,a.nombre as NombreSeccion, " +
                " n.nombre as NombreNivel , g.cod_grado, a.cod_aula, n.cod_nivel " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join curso c on dh.cod_curso = c.cod_curso " +
                "inner join hora h on dh.cod_hora = h.cod_hora " +
                "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado) " +
                "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel) " +
                "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                "WHERE N.COD_NIVEL <> 2 " +
                "order by n.nombre " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setSeccionDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                oDocente.setCodGrado(rs.getInt(4));
                oDocente.setCodSeccion(rs.getInt(5));
                oDocente.setCodNivel(rs.getInt(6));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Vector<Docente> gradoNivelSegunDocenteCodPersona(int codPersona){
        Vector<Docente> LDocente = new Vector<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado, n.nombre as NombreNivel, ng.cod_nivelgrado " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad  " +
                "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado)  " +
                "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel)  " +
                "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                "where dh.cod_persona = ? " +
                "and dh.cod_horario IN (     " +
                    "SELECT ha.cod_horario     " +
                    "FROM horario_aula ha     " +
                    "WHERE ha.cod_progaula IN (           " +
                        "SELECT pa.cod_progaula           " +
                        "FROM programacion_aula pa           " +
                        "WHERE pa.cod_progannoacad IN (                 " +
                            "select pac.cod_progannoacad                 " +
                            "from programacion_annoacademico pac                 " +
                            "where TO_CHAR(pac.fecha_inicio, 'YYYY') =  ( " +
                                "SELECT to_char(pa.fecha_inicio,'YYYY')                                                            " +
                                "FROM programacion_annoacademico pa                                                            " +
                                "INNER JOIN programacion_aula PAU ON PAU.cod_progannoacad = pa.cod_progannoacad                                                            " +
                                "INNER JOIN HORARIO_AULA HA ON HA.cod_progaula = PAU.cod_progaula                                                            " +
                                "INNER JOIN detalle_horarioaula DH ON DH.cod_horario = HA.cod_horario                                                            " +
                                "WHERE DH.cod_persona = ?                                                            " +
                                "ORDER BY pa.cod_progannoacad DESC " +
                                "LIMIT 1)))) " +
                "order by g.nombre,n.nombre  ;      " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersona);
            ps.setInt(2, codPersona);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setNivelDocente(rs.getString(2));
                oDocente.setCodNivelGrado(rs.getInt(3));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static ArrayList<Docente> NombreDocentesSegunHorarioAlumnoPorAñoAcademicoYCodigoAlumno(int codAlumno){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = " select distinct(dha.cod_persona), pn.primer_nombre as nombre, pn.apell_paterno as apPaterno, " +
                     "pn.apell_materno as apMaterno " +
                     "from matricula m inner join aula a on m.cod_aula = a.cod_aula " +
                     "inner join programacion_aula pa on pa.cod_progaula = m.cod_progaula " +
                     "inner join nivel_grado ng on pa.cod_nivelgrado = ng.cod_nivelgrado " +
                     "inner join nivel n on n.cod_nivel = ng.cod_nivel " +
                     "inner join grado g on g.cod_grado = ng.cod_grado " +
                     "inner join horario_aula ha on ha.cod_progaula = pa.cod_progaula " +
                     "inner join detalle_horarioaula dha on ha.cod_horario = dha.cod_horario " +
                     "inner join hora h on h.cod_hora = dha.cod_hora " +
                     "inner join curso c on c.cod_curso = dha.cod_curso " +
                     "inner join personal p on p.cod_persona = dha.cod_persona " +
                     "inner join p_natural pn on pn.cod_persona = p.cod_persona " +
                     "where m.cod_persona = ? and TO_CHAR(m.fecha_registro, 'YYYY') = YEAR(?) " +
                     "and ha.cod_aula in " +
                        "(select m.cod_aula                   " +
                        "from matricula m                   " +
                        "where m.cod_persona = ? ) " +
                        "and ha.cod_horario in " +
                            "(select dh.cod_horario                       " +
                            "from detalle_horarioaula dh                       " +
                            "where dh.cod_horario = ha.cod_horario) " +
                     "order by pn.apell_paterno" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codAlumno);
            ps.setInt(2, codAlumno);
            ps.setInt(3, codAlumno);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodDocente(rs.getInt(1));
                oDocente.setNombreDocente(rs.getString(2));
                oDocente.setApellidoPaternoDocente(rs.getString(3));
                oDocente.setApellidoMaternoDocente(rs.getString(4));
                
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static ArrayList<Docente> NombreDocentesSegunCursoHorarioAlumnoPorAñoAcademicoCodigoAlumnoYCodigoCurso(int anio, int codAlumno, int codCurso){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = " select distinct(dha.cod_persona), pn.primer_nombre as nombre, pn.apell_paterno as apPaterno, pn.apell_materno as apMaterno, " +
                "c.nombre as nombreCurso " +
                "from matricula m inner join aula a on m.cod_aula = a.cod_aula " +
                "inner join programacion_aula pa on pa.cod_progaula = m.cod_progaula " +
                "inner join nivel_grado ng on pa.cod_nivelgrado = ng.cod_nivelgrado " +
                "inner join nivel n on n.cod_nivel = ng.cod_nivel " +
                "inner join grado g on g.cod_grado = ng.cod_grado " +
                "inner join horario_aula ha on ha.cod_progaula = pa.cod_progaula " +
                "inner join detalle_horarioaula dha on ha.cod_horario = dha.cod_horario " +
                "inner join hora h on h.cod_hora = dha.cod_hora " +
                "inner join curso c on c.cod_curso = dha.cod_curso " +
                "inner join personal p on p.cod_persona = dha.cod_persona " +
                "inner join p_natural pn on pn.cod_persona = p.cod_persona " +
                "where m.cod_persona = ? and TO_CHAR(m.fecha_registro, 'YYYY') = ? " +
                "and ha.cod_aula in (" +
                    "select m.cod_aula                   " +
                    "from matricula m                   " +
                    "where m.cod_persona = ? ) " +
                    "and ha.cod_horario in (" +
                        "select dh.cod_horario                       " +
                        "from detalle_horarioaula dh                       " +
                        "where dh.cod_horario = ha.cod_horario) " +
                 "and c.cod_curso = ? " +
                 "order by pn.apell_paterno" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codAlumno);
            ps.setInt(2, anio);
            ps.setInt(3, codAlumno);
            ps.setInt(4, codCurso);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodDocente(rs.getInt(1));
                oDocente.setNombreDocente(rs.getString(2));
                oDocente.setApellidoPaternoDocente(rs.getString(3));
                oDocente.setApellidoMaternoDocente(rs.getString(4));
                oDocente.setNombreCursoDocente(rs.getString(5));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Vector<Docente> NombresNivelGradoCodNivelGradoPrimaria(){
        Vector<Docente> LDocente = new Vector<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT ng.cod_nivelgrado, g.nombre, n.nombre " +
                "FROM nivel_grado ng " +
                "INNER JOIN nivel n ON ng.cod_nivel =  n.cod_nivel " +
                "INNER JOIN grado g ON ng.cod_grado = g.cod_grado " +
                "where n.cod_nivel = 4 " +
                "ORDER BY n.cod_nivel, g.cod_grado " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodNivelGrado(rs.getInt(1));
                oDocente.setGradoDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Vector<Docente> NombresNivelGradoCodNivelGradoSecundaria(){
        Vector<Docente> LDocente = new Vector<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT ng.cod_nivelgrado, g.nombre, n.nombre " +
                "FROM nivel_grado ng " +
                "INNER JOIN nivel n ON ng.cod_nivel =  n.cod_nivel " +
                "INNER JOIN grado g ON ng.cod_grado = g.cod_grado " +
                "where n.cod_nivel = 7 " +
                "ORDER BY n.cod_nivel, g.cod_grado " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setCodNivelGrado(rs.getInt(1));
                oDocente.setGradoDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Docente NombreDocentesAnioPorCodigo(int codDocente){        
        Docente oDocente = new Docente();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select distinct(dh.cod_persona), pn.primer_nombre as nombre, pn.apell_paterno as apPaterno, " +
                "pn.apell_materno as apMaterno,yearp(?) " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join personal p on p.cod_persona = dh.cod_persona " +
                "inner join p_natural pn on pn.cod_persona = p.cod_persona " +
                "where  dh.cod_persona = ? and        " +
                "dh.cod_horario IN (                       " +
                    "SELECT ha.cod_horario                       " +
                    "FROM horario_aula ha                       " +
                    "WHERE ha.cod_progaula IN (                             " +
                        "SELECT pa.cod_progaula                             " +
                        "FROM programacion_aula pa                             " +
                        "WHERE pa.cod_progannoacad IN (                                   " +
                            "select pac.cod_progannoacad                                   " +
                            "from programacion_annoacademico pac                                   " +
                            "where TO_CHAR(pac.fecha_inicio, 'YYYY') = yearp(?)))) " +
                 "order by pn.apell_paterno" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codDocente);
            ps.setInt(2, codDocente);
            ps.setInt(3, codDocente);
            rs = ps.executeQuery();
            while(rs.next()){
                
                oDocente.setCodDocente(rs.getInt(1));
                oDocente.setNombreDocente(rs.getString(2));
                oDocente.setApellidoPaternoDocente(rs.getString(3));
                oDocente.setApellidoMaternoDocente(rs.getString(4));
                oDocente.setAnioDocente(rs.getString(5));                
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return oDocente;
    }

    @Override
    public String toString() {
        return "Docente{" + "codDocente=" + codDocente + ", codHorario=" + codHorario + ", codCurso=" + codCurso + ", codGrado=" + codGrado + ", codNivel=" + codNivel + ", codSeccion=" + codSeccion + ", codNivelGrado=" + codNivelGrado + ", nombreDocente=" + nombreDocente + ", apellidoPaternoDocente=" + apellidoPaternoDocente + ", apellidoMaternoDocente=" + apellidoMaternoDocente + ", nombreCursoDocente=" + nombreCursoDocente + ", anioDocente=" + anioDocente + ", gradoDocente=" + gradoDocente + ", seccionDocente=" + seccionDocente + ", nivelDocente=" + nivelDocente + '}';
    }

public static ArrayList<Docente> GradoSeccionNivelDocenteSegunHorario(int codDocente){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado,a.nombre as NombreSeccion, " +
                    "n.nombre as NombreNivel, dh.cod_horario, g.cod_grado, a.cod_aula, n.cod_nivel " +
                    "from detalle_horarioaula dh " +
                    "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                    "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                    "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                    "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                    "inner join curso c on dh.cod_curso = c.cod_curso " +
                    "inner join hora h on dh.cod_hora = h.cod_hora  " +
                    "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado)  " +
                    "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel)  " +
                    "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                    "where dh.cod_persona = ? " +
                    "and dh.cod_horario IN (     " +
                        "SELECT ha.cod_horario     " +
                        "FROM horario_aula ha     " +
                        "WHERE ha.cod_progaula IN (           " +
                            "SELECT pa.cod_progaula           " +
                            "FROM programacion_aula pa           " +
                            "WHERE pa.cod_progannoacad IN (                 " +
                                "select pac.cod_progannoacad                 " +
                                "from programacion_annoacademico pac                 " +
                                "where TO_CHAR(pac.fecha_inicio, 'YYYY') = yearp(?)))) " +
                     "order by g.nombre,NombreSeccion,n.nombre  ;" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codDocente);
            ps.setInt(2, codDocente);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setSeccionDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                oDocente.setCodHorario(rs.getInt(4));
                oDocente.setCodGrado(rs.getInt(5));
                oDocente.setCodSeccion(rs.getInt(6));
                oDocente.setCodNivel(rs.getInt(7));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Vector<Docente> CursosGradoSeccionNivelDocenteSegunHorario(int codDocente){
        Vector<Docente> LDocente = new Vector<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado,a.nombre as NombreSeccion, " +
                "n.nombre as NombreNivel, dh.cod_horario, c.nombre, c.cod_curso," +
                "g.cod_grado, a.cod_aula, n.cod_nivel " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join curso c on dh.cod_curso = c.cod_curso " +
                "inner join hora h on dh.cod_hora = h.cod_hora  " +
                "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado)  " +
                "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel)  " +
                "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                "where dh.cod_persona = ? and dh.cod_horario IN (     " +
                    "SELECT ha.cod_horario     " +
                    "FROM horario_aula ha     " +
                    "WHERE ha.cod_progaula IN (           " +
                        "SELECT pa.cod_progaula           " +
                        "FROM programacion_aula pa           " +
                        "WHERE pa.cod_progannoacad IN (                 " +
                            "select pac.cod_progannoacad                 " +
                            "from programacion_annoacademico pac                 " +
                            "where TO_CHAR(pac.fecha_inicio, 'YYYY') = yearp(?)))) " +
                "order by g.nombre,NombreSeccion,n.nombre  ;" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codDocente);
            ps.setInt(2, codDocente);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setSeccionDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                oDocente.setCodHorario(rs.getInt(4));
                oDocente.setNombreCursoDocente(rs.getString(5));
                oDocente.setCodCurso(rs.getInt(6));
                oDocente.setCodGrado(rs.getInt(7));
                oDocente.setCodSeccion(rs.getInt(8));
                oDocente.setCodNivel(rs.getInt(9));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static ArrayList<Docente> CursosGradoNivelDocenteSegunCodPersonaDocente(int codPersonaDocente){
        ArrayList<Docente> LDocente = new ArrayList<Docente>();
        Docente oDocente = null;
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado, n.nombre as NombreNivel,  " +
                    "c.nombre, c.cod_curso, g.cod_grado, n.cod_nivel " +
                    "from detalle_horarioaula dh " +
                    "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                    "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                    "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                    "inner join curso c on dh.cod_curso = c.cod_curso " +
                    "inner join hora h on dh.cod_hora = h.cod_hora  " +
                    "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado)  " +
                    "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel)  " +
                    "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                    "where dh.cod_persona = ? and dh.cod_horario IN (      " +
                        "SELECT ha.cod_horario    " +
                        "FROM horario_aula ha    " +
                        " WHERE ha.cod_progaula IN (           " +
                            "SELECT pa.cod_progaula           " +
                            "FROM programacion_aula pa           " +
                            "WHERE pa.cod_progannoacad IN (                 " +
                                "select pac.cod_progannoacad                 " +
                                "from programacion_annoacademico pac                 " +
                                "where TO_CHAR(pac.fecha_inicio, 'YYYY') = yearp(?)))) " +
                     "order by g.nombre ;" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1,  codPersonaDocente);
            ps.setInt(2, codPersonaDocente);
            rs = ps.executeQuery();
            while(rs.next()){
                oDocente = new Docente();
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setNivelDocente(rs.getString(2));
                oDocente.setNombreCursoDocente(rs.getString(3));
                oDocente.setCodCurso(rs.getInt(4));
                oDocente.setCodGrado(rs.getInt(5));
                oDocente.setCodNivel(rs.getInt(6));
                LDocente.add(oDocente);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LDocente;
    }

public static Docente GradoSeccionNivelDocenteSegunCodigoHorario(int codHorario, int codPersonaDocente){
        Docente oDocente = new Docente();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "select  DISTINCT g.nombre as NombreGrado,a.nombre as NombreSeccion, n.nombre as NombreNivel, yearp(?) " +
                "from detalle_horarioaula dh " +
                "inner join horario_aula ha on dh.cod_horario = ha.cod_horario " +
                "INNER JOIN aula a ON (a.cod_aula = ha.cod_aula) " +
                "inner join programacion_aula pa on ha.cod_progaula = pa.cod_progaula " +
                "inner join programacion_annoacademico pac on pa.cod_progannoacad = pac.cod_progannoacad " +
                "inner join curso c on dh.cod_curso = c.cod_curso " +
                "inner join hora h on dh.cod_hora = h.cod_hora  " +
                "INNER JOIN nivel_grado ng ON (ng.cod_nivelgrado = pa.cod_nivelgrado)  " +
                "INNER JOIN nivel n ON (n.cod_nivel = ng.cod_nivel)  " +
                "INNER JOIN grado g ON (g.cod_grado = ng.cod_grado) " +
                "where dh.cod_horario = ? " +
                "order by g.nombre,NombreSeccion,n.nombre  ;" ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPersonaDocente);
            ps.setInt(2, codHorario);
            rs = ps.executeQuery();
            while(rs.next()){
                
                oDocente.setGradoDocente(rs.getString(1));
                oDocente.setSeccionDocente(rs.getString(2));
                oDocente.setNivelDocente(rs.getString(3));
                oDocente.setAnioDocente(rs.getString(4));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return oDocente;
    }

    /**
     * @return the codCurso
     */
    public int getCodCurso() {
        return codCurso;
    }

    /**
     * @param codCurso the codCurso to set
     */
    public void setCodCurso(int codCurso) {
        this.codCurso = codCurso;
    }

    /**
     * @return the codGrado
     */
    public int getCodGrado() {
        return codGrado;
    }

    /**
     * @param codGrado the codGrado to set
     */
    public void setCodGrado(int codGrado) {
        this.codGrado = codGrado;
    }

    /**
     * @return the codNivel
     */
    public int getCodNivel() {
        return codNivel;
    }

    /**
     * @param codNivel the codNivel to set
     */
    public void setCodNivel(int codNivel) {
        this.codNivel = codNivel;
    }

    /**
     * @return the codSeccion
     */
    public int getCodSeccion() {
        return codSeccion;
    }

    /**
     * @param codSeccion the codSeccion to set
     */
    public void setCodSeccion(int codSeccion) {
        this.codSeccion = codSeccion;
    }

    /**
     * @return the codNivelGrado
     */
    public int getCodNivelGrado() {
        return codNivelGrado;
    }

    /**
     * @param codNivelGrado the codNivelGrado to set
     */
    public void setCodNivelGrado(int codNivelGrado) {
        this.codNivelGrado = codNivelGrado;
    }


}
